package net.xinqushi.design.adapter;

import org.springframework.web.servlet.HandlerAdapter;

import java.util.concurrent.Callable;
import java.util.concurrent.Executors;

/**
 * @author xjie
 * @description 适配器/转换器模式 接口转换器
 *    种类:
 *       类适配器模式     利用继承关系
 *       对象适配器模式   利用聚合/组合模式(聚合=依赖一个没有关系的类，组合关系=依赖一个归于于自己的类)
 * @see Executors.RunnableAdapter
 * @see HandlerAdapter 各种请求方式(Servlet/Controller/HttpRequest)适配
 */
public class AdapterTest {

    public static void main(String[] args) {
        Runnable r = ()->{};
        Callable c = new RunnableAdapter<Void>(r,null);
    }
    //对象适配器模式 Runnable adaptor to Callable
    static final class RunnableAdapter<T> implements Callable<T> {
        final Runnable task;
        final T result;
        RunnableAdapter(Runnable task, T result) {
            this.task = task;
            this.result = result;
        }
        public T call() {
            task.run();
            return result;
        }
    }
}
